package com.wang.springbootinit.controller.teacher;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.wang.springbootinit.common.BaseResponse;
import com.wang.springbootinit.common.ResultUtils;
import com.wang.springbootinit.model.dto.StudentBatchAddRequest;
import com.wang.springbootinit.model.dto.StudentRoleQueryRequest;
import com.wang.springbootinit.model.dto.StudentUpdateRequest;
import com.wang.springbootinit.model.vo.StudentVO;
import com.wang.springbootinit.service.StudentService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

import java.util.Collections;
import java.util.List;

/**
 * 教师端-学生管理控制器
 * 提供学生信息的增删改查等管理功能
 */
@RestController
@RequestMapping("/teacher/student")
public class StudentManageController {

    @Autowired
    private StudentService studentService;

    /**
     * 分页获取学生列表
     * @param pageNum 页码
     * @param pageSize 每页数量
     * @param query 查询条件（可选，支持姓名模糊查询）
     * @return 学生信息分页数据
     */
    @GetMapping("/list")
    public BaseResponse<Page<StudentVO>> listStudents(
            @RequestParam(defaultValue = "1") int pageNum,
            @RequestParam(defaultValue = "10") int pageSize,
            StudentRoleQueryRequest query) {
        query.setUserRole(Collections.singletonList(0));
        return ResultUtils.success(studentService.listStudents(pageNum, pageSize, query));
    }

    /**
     * 获取获取学生列表
     * @return
     */
    @GetMapping("/listAll")
    public BaseResponse<List<StudentVO>> listAllStudents() {
        return ResultUtils.success(studentService.listAllStudents());
    }

    /**
     * 获取学生详细信息
     * @param id 学生ID
     * @return 学生详细信息
     */
    @GetMapping("/get")
    public BaseResponse<StudentVO> getStudentById(@RequestParam Long id) {
        return ResultUtils.success(studentService.getStudentVOById(id));
    }

    /**
     * 更新学生信息
     * @param updateRequest 学生信息更新请求
     * @return 更新结果
     */
    @PostMapping("/update")
    public BaseResponse<Boolean> updateStudent(@RequestBody StudentUpdateRequest updateRequest) {
        return ResultUtils.success(studentService.updateStudent(updateRequest));
    }

    /**
     * 删除学生
     * @param id 学生ID
     * @return 删除结果
     */
    @PostMapping("/delete")
    public BaseResponse<Boolean> deleteStudent(@RequestParam Long id) {
        return ResultUtils.success(studentService.deleteStudent(id));
    }

    /**
     * 根据班级批量添加学生
     * @param addRequest 添加学生请求（包含班级ID和学生信息列表）
     * @return 添加结果
     */
    @PostMapping("/add")
    public BaseResponse<Boolean> addStudentsByClass(@RequestBody StudentBatchAddRequest addRequest) {
        return ResultUtils.success(studentService.addStudentsByClass(addRequest));
    }
}
